const express = require('express');
const mongoose = require('mongoose');
const app = express();

// 如何让服务器和数据库建立联系
// mongoose是一个对象文档模型库
// monboose将服务器和数据库连接起来

const promise = new Promise((resolve,reject)=>{
    mongoose.connect('mongodb://localhost:27017/mongoose_ddx',{useNewUrlParser:true,useUnifiedTopology:true});
    mongoose.connection.once('open',err=>{
        if(err){
            console.log(err);
            reject(err);
        }else{
            console.log('数据库连接成功');
            resolve();
        }
    })
});
// new promise()()()
// 匿名函数自己调用 IIFE 立即执行函数
// 服务器和数据库必须先连接上 才能进行数据的增删改查
(async()=>{
    // 数据库和服务器建立连接
    await promise;
    // 写服务器的增删改查
    // mongoose提供了三个核心对象 
    // Schema模式对象 通过schema可以对集合进行约束
    // model 模型对象 相当于数据库中的集合 通过这个对象咱们就能对集合进行操作
    // document 文档对象 通过文档对象可以对数据库当中的信息进行增删改查这些操作

    // 创建约束对象schema
    const Schema = mongoose.Schema;
    const studentsSchema = new Schema({
        // 创建约束对象
        // 常见的数据类型有哪些：string number data boolean array object mixed(任意类型)
        studentId:{
            // type指的是你要输入数据的数据类型
            type:String,
            // 是否唯一 true是唯一的 false不是唯一
            unique:true,
            // 是否是必须的 true是必须的 false不是必须的
            required:true
        },
        name:{
            type:String,
            unique:true,
            required:true
        },
        age:{
            type:Number,
            unique:false,
            required:true
        },
        sex:{
            type:String,
            unique:false,
            required:true,
            default:'男'
        },
        // hobby:{
        //     type:String,
        //     // unique:false,
        //     // required:false
        // },
        // 简写为这种格式
        hobby:String,
        // createTime:{
            // type:Data,
            // default:Data.now //默认值
        // },
        info:Schema.Types.Mixed //任意数据类型
    })

    // 创建模型对象
    const Students = mongoose.model('students',studentsSchema);
    // 创建文档
    const sutdent1 = new Students({
        studentId:'01',
        name:'Jack',
        age:10,
        sex:'男',
        hobby:'性别男爱好女',
        info:'活泼开朗，团结合作'
    })
    // 把数据保存到数据库当中
    sutdent1.save(err=>{
        if(!err){
            console.log('数据保存成功');
        }else{
            console.log(err);
        }
    })
})()

app.listen(3000,err=>{
    if(!err) console.log('服务器启动成功');
    else console.log(err);
})